#!/usr/bin/python3
# -*- coding:utf-8 -*-
""""
@Author: 李吉凯
@Email: lijk34925@hundsun.com
@Time: 2022/5/11 9:28
@File: check.py
"""
from qturboframe.lib.utils.by import By
from qturboframe.lib.webdriver import SeleniumError

from BladeFerm.Lib.Common import logger

from BladeFerm.hui_app import FE
from BladeFerm.hui12_common.function import display_wait


def check_of_text(text=None, assist=''):
    '''
    检查文本不存在与否？一般可用于判断页面上加载的元素是否出现？
    要求：通过 text 和 assist 两个值必须确定唯一元素，否则会报错返回空值！！！
    :param text: 文本值，页面上想要看到的文本
    :param assist: 辅助属性，存在多个时，可给出目标元素的辅助属性帮助唯一定位。例如：'class:nick-name'
    :return:
    '''
    ele = f'//*[contains(text(),"{text}")]'
    logger.info(f'查找的XPATH表达式: {ele}')
    out_res = exists(By.XPATH, ele, assist=assist)
    if not out_res:
        logger.error(f'检查文本 [{text}] 不存在！')
        raise SeleniumError(f'检查文本 [{text}] 不存在！')
    else:
        logger.info(f'检查文本 [{text}] 存在！')
        return True

def check_dialog_of_text(idname=None, timeout=5, driver=None):
    return display_wait(idname=idname, flag=1, timeout=timeout, driver=driver)


def assert_except(result, except_flag, message=''):
    if result == except_flag:
        logger.info(f'{message} 检查结果 {result} 与期望结果{except_flag}一致。')
        return True
    else:
        logger.error(f'{message} 检查结果 {result} 与期望结果{except_flag}不一致。')
        raise SeleniumError(f'{message} 检查结果 {result} 与期望结果{except_flag}不一致。')


def exists(by, value, assist='', timeout=5, switchframe=False):
    '''
    根据多属性判断元素是否存在，主属性包括by、value两个参数，by对应八种元素查找方式，
    assist指的是辅助属性，即在八种元素查找方式的基础上再加上其他属性条件进行
    高精度的查找；最终结果是符合所有查找条件的元素集合

    :Args:
     - by: 与find_element()的by参数相同
     - value: 与find_element()的value参数相同
     - assist: 辅助属性，'属性名称:属性值'，支持多组属性，多组之间用逗号隔开
     - timeout: 查找元素的超时时间，在timeout时间内会不断的查找直到找到为止，超过timeout时间则不再继续查找
     - switchframe: 自动跳转frame查找元素的开关，默认为False，即不自动跳转frame

    :Returns:
        存在则返回页面上所有查找条件的元素集合，WebElement类型；不存在则返回None

    :Example:
     - 例: element = driver.exist(By.CSS_SELECTOR, 'input#su', 'value:百度一下', 3)
    '''
    try:
        findresult = FE.driver.find_elements_by_attribute(by, value, assist, timeout, switchframe)
    except SeleniumError:
        findresult = None
    return findresult
